class Transporte < ActiveRecord::Base
    include Auditing

    has_many :armazenamentos
    has_many :depositos, :through => :armazenamentos, :dependent => :destroy

    before_save :data_faturamento
	after_update :save_armazenamentos

    belongs_to :status
    belongs_to :tipo
    belongs_to :transportadora
    belongs_to :destino
    belongs_to :user

    #validates_associated :armazenamentos
	
	validates_presence_of :ndt, :created_at, :transportadora, :destino, :tipo, :m, :peso, :itinerario, :status_id, :cxs, :pares
	validates_presence_of :armazenamentos 	

    validates_numericality_of :ndt, :m, :peso, :pares, :cxs

    validates_uniqueness_of :ndt

    validates_each :created_at  do |record, attr, value|
        record.errors.add :created_at, "inválida." unless Date.valid?(value)	
    end
	

    #Scopo por Status
    named_scope :s, lambda { |status|
        {:conditions => ["status_id = ?", status] }
    }

    def to_label
        self.id
    end

    def ndt_novo
        "#{self.ndt.to_i}"
    end

    def pares_novo
        "#{self.pares.to_i.para_dinheiro.to_s_m}"
    end

    def cxs_novo
        "#{self.cxs.to_i.para_dinheiro.to_s_m}"
    end

    def m_novo
        "#{self.m.to_i.para_dinheiro.to_s_m}"
    end

    def peso_novo
        "#{self.peso.to_i.para_dinheiro.to_s_m}"
    end

    def data_inicio
        return self.created_at.to_s_br
    end

    def armazenados_em
        nome = ""
        self.armazenamentos.each do |arm|
            deposito = arm.deposito
            nome += "#{deposito.nome}\n\n"# - #{arm.box},"
        end
        return nome
    end

    def etq
        self.etiqueta ? "OK" : " - "
    end

    def data_faturamento
        if self.status.id == $LIB
            self.ended_at ||= Deposito.new.current_time_bd
#		else
#            if self.status.id != 9
#                self.ended_at = nil
#            end
        end
    end

    def isfaturamento?(id)
         $STATUS_FATURADOS.include?(id)
    end

    def precisa_de_box?(id)
        $STATUS_PRECISA_DE_BOX.include?(id)
    end
	
	def armazenamento_attributes=(armazenamentos_attributes)
		armazenamentos_attributes.each do |attributes|
			if attributes[:id].blank?
				armazenamentos.build(attributes)
			else
				armazenamento = armazenamentos.detect {|a| a.id == attributes[:id].to_i}
				armazenamento.attributes = attributes
			end
		end		
	end
	
	def save_armazenamentos
		armazenamentos.each do |a|
			if a.should_destroy?
				a.destroy
			else
				a.save(true)
			end
		end
	end
end	
